package org.cable.account.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import java.util.Map;
import org.cable.account.controller.request.TrafficRequest;
import org.cable.account.controller.request.UseTrafficRequest;
import org.cable.account.model.TrafficDO;
import com.baomidou.mybatisplus.extension.service.IService;
import org.cable.account.vo.TrafficVO;
import org.cable.common.model.EventMessage;
import org.cable.common.util.JsonData;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author hsj
 * @since 2023-10-25
 */
public interface TrafficService extends IService<TrafficDO> {

	/**
	 * 新增流量包
	 * @param trafficDO
	 * @return
	 */
	int add(TrafficDO trafficDO);

	/**
	 * 分页查询有用的流量包
	 * @param page 页数
	 * @param size 条数
	 * @param accountNo 账号
	 * @return
	 */
	IPage<TrafficDO> pageAvailable(int page,int size,long accountNo);

	/**
	 * 查找详情
	 * @param trafficId
	 * @param accountNo
	 * @return
	 */
	TrafficDO findByIdAndAccountNo(Long trafficId,Long accountNo);

	/**
	 * 增加某个流量包天使用次数
	 * @param currentTraffic
	 * @param accountNo
	 * @param dayUsedTimes
	 * @return
	 */
	int addDaysUsedTimes(long currentTraffic,Long accountNo,int dayUsedTimes);

	void handlerTrafficMessage(EventMessage eventMessage);

	/**
	 * 查询可用的流量包
	 * @param request
	 * @return
	 */
	Map<String, Object> pageTraffic(TrafficRequest request);

	/**
	 * 查看具体流量包信息
	 * @param trafficId
	 * @return
	 */
	TrafficVO detail(long trafficId);

	/**
	 * 使用流量包
	 * @param useTrafficRequest
	 * @return
	 */
	JsonData reduce(UseTrafficRequest useTrafficRequest);


	/**
	 * 删除过期流量包
	 * @return
	 */
	boolean deleteExpireTraffic();

}
